import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'        
import axios from 'axios'
// 导入全局样式表
import '@/assets/global.less'
//引入 ElementUI
import ElementUI from 'element-ui'
//引入样式
import 'element-ui/lib/theme-chalk/index.css'
//设置axios 基地址
axios.defaults.baseURL = 'http://big-event-vue-api-t.itheima.net'
//将axios挂载到Vue构造函数的原型对象上 页面中通过 this.$http 调用axios
 Vue.prototype.$http=axios
Vue.config.productionTip = false
//注册 ElementUI
Vue.use(ElementUI);

// 导入富文本编辑器
import VueQuillEditor from 'vue-quill-editor'
// 导入富文本编辑器的样式
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'

// 全局注册富文本编辑器
Vue.use(VueQuillEditor)

//配置路由守卫
const whiteList = ['/reg', '/login'] // 白名单

router.beforeEach((to, from, next) => {
  // 取出token(vuex)
  const token = store.state.token
  console.log('全局前置路由守卫', token)
  if (token) {
    // 去登录页
    if (to.path === '/login') {
      console.log('你已经登录了,就不能去login,转到主页')
      next('/')
    } else {
      next()
    }
  } else {
    // 没有登录，只能去白名单(那些不需要token就可以访问的页面)
    if (whiteList.includes(to.path)) {
      next()
    } else {
      console.log('你没有登录，转到登录页')
      next('/login')
    }
    // next() // 重点强调next一定要调用
  }
})



// 添加请求拦截器
axios.interceptors.request.use(function (config) {
  // console.log(config);
  // 只需要给需要权限的 my接口添加  返回true 和false
    // 方法1:
  if (config.url.startsWith('/my')) {
    // 添加统一的headers
    config.headers.Authorization = store.state.token
  }   
      // 方法2: 关键字查找
    // if(location.href.indexOf("/my")!==-1){
    //   // 添加统一的headers
    // config.headers.Authorization = store.state.token
    // }
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
}); 

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  return response;
}, function (error) {
  // 对响应错误做点什么
   console.log(error,"响应错误")
   if(error.response.status===401){
      //清除token  //退出到登录页
      store.commit('updateToken', "")
      store.commit('updateUserInfo',{})
      router.push('/login')
   }
  return Promise.reject(error);
});

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')
